// 中国剩余定理
// 利用了扩展欧几里得
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
int a[30], cnt = 1;
int m[30];

LL exgcd(LL a, LL b, LL &x, LL &y)
{
    if (!b)
    {
        x = 1, y = 0;
        return a;
    }
    LL t = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return t;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    LL ans = 0;
    bool no_ans = false;
    int n;
    cin >> n;
    LL a1, m1;
    // 先输入第一个数，用于合并所有的数据
    cin >> a1 >> m1;
    for (int i = 0; i < n - 1; ++i)
    {
        LL a2, m2;
        cin >> a2 >> m2;
        LL k1, k2;
        LL gcd = exgcd(a1, a2, k1, k2);
        // 还要记得翻倍操作
        if ((m2 - m1) % gcd)
        {
            no_ans = true;
            break;
        }
        k1 = k1 * ((m2 - m1) / gcd);
        // 接下来要进行更新a1和m1的操作
        // 首先，由于题目要求输出最小非负整数，所以需要先对k1进行处理一下
        int tmp = a2 / gcd;
        // 求出最小的k1
        // 最后的%tmp操作控制了k1的值位于1~tmp之间
        k1 = (k1 % tmp + tmp) % tmp;
        m1 = k1 * a1 + m1;
        a1 = a1 * a2 / gcd;
    }
    if (no_ans)
        cout << -1 << endl;
    else
        cout << (m1 % a1 + a1) % a1 << endl;
    return 0;
}
